package com.example.designpatterns.strategy;

/**
 * 上下文类 - 持有对策略对象的引用
 * 客户端通过上下文来调用策略
 * @param <T> 输入参数类型
 * @param <R> 返回结果类型
 */
public class Context<T, R> {
    private Strategy<T, R> strategy;
    
    /**
     * 创建上下文并设置初始策略
     * @param strategy 要使用的策略
     */
    public Context(Strategy<T, R> strategy) {
        this.strategy = strategy;
    }
    
    /**
     * 设置要使用的策略
     * @param strategy 要使用的策略
     */
    public void setStrategy(Strategy<T, R> strategy) {
        this.strategy = strategy;
    }
    
    /**
     * 执行当前策略
     * @param input 输入数据
     * @return 策略执行结果
     */
    public R executeStrategy(T input) {
        return strategy.execute(input);
    }
} 